Jackson লাইব্রেরিতে, আপনি JSON Serialization এবং Deserialization প্রক্রিয়ায় field, getter, এবং setter-এর visibility কাস্টমাইজ করতে পারেন। এই কাস্টমাইজেশনটি কার্যকরী যখন আপনি চান যে কিছু ফিল্ড শুধুমাত্র getter বা setter এর মাধ্যমে দেখানো হোক বা অদৃশ্য থাকুক।
Jackson-এর কিছু অ্যানোটেশন এবং কনফিগারেশন আছে যা আপনাকে এই visibility কাস্টমাইজ করার সুযোগ দেয়।
Visibility কাস্টমাইজ করার জন্য Jackson এর অ্যানোটেশন এবং কনফিগারেশন:
@JsonProperty: ফিল্ড বা মেথডের জন্য কাস্টম visibility নির্ধারণ করতে ব্যবহৃত হয়।@JsonIgnore: একটি ফিল্ড বা মেথডকে Serialization/Deserialization থেকে বাদ দিতে ব্যবহৃত হয়।@JsonAutoDetect: এটি ক্লাস বা ObjectMapper-এর ক্ষেত্রে getter, setter, field visibility কাস্টমাইজ করতে ব্যবহৃত হয়।@JsonInclude: JSON-এ কেবলমাত্র নির্দিষ্ট শর্তে ফিল্ডগুলো অন্তর্ভুক্ত করতে ব্যবহৃত হয়।
1. @JsonAutoDetect Annotation
@JsonAutoDetect অ্যানোটেশন ব্যবহার করে আপনি getter, setter, এবং field-এর visibility কাস্টমাইজ করতে পারেন। এটি ObjectMapper-এ global ভাবে ব্যবহার করা যেতে পারে, অথবা একটি নির্দিষ্ট ক্লাসে ব্যবহার করা যেতে পারে।
Visibility Levels:
JsonAutoDetect.Visibility.ANY: সকল ফিল্ড ও মেথড visible হবে।JsonAutoDetect.Visibility.NON_PRIVATE: শুধুমাত্র public এবং protected ফিল্ড/মেথড visible হবে।JsonAutoDetect.Visibility.PROTECTED_AND_PUBLIC: public এবং protected ফিল্ড/মেথড visible হবে।JsonAutoDetect.Visibility.NONE: সব ফিল্ড এবং মেথড hidden থাকবে।
Example:
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
import com.fasterxml.jackson.databind.ObjectMapper;
@JsonAutoDetect(fieldVisibility = Visibility.ANY, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NON_PRIVATE)
public class Person {
private String name; // Field will be included in JSON serialization
private int age; // Field will be included in JSON serialization
private String address; // Not visible in JSON
public Person(String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
// Getter and Setter for address are private, so this field will not be visible in JSON
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonAutoDetectExample {
public static void main(String[] args) throws Exception {
Person person = new Person("John", 30, "1234 Elm St");
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(person);
System.out.println(json);
}
}
JSON Output:
{
"name": "John",
"age": 30
}
- এখানে,
addressফিল্ডটি private থাকার কারণে JSON-এ অন্তর্ভুক্ত হয়নি, এবং getter মেথডটিNONEvisibility-এ থাকায়nameএবংageগেটারের মাধ্যমে serialization হয়েছে।
2. @JsonProperty Annotation
@JsonProperty ব্যবহার করে আপনি নির্দিষ্ট getter অথবা setter মেথডের visibility কাস্টমাইজ করতে পারেন। এটি একটি নির্দিষ্ট ফিল্ডের জন্য serialization এবং deserialization নিয়ন্ত্রণ করে।
Example:
import com.fasterxml.jackson.annotation.JsonProperty;
public class Person {
private String name;
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private String password;
public Person(String name, String password) {
this.name = name;
this.password = password;
}
@JsonProperty
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonPropertyExample {
public static void main(String[] args) throws Exception {
Person person = new Person("John", "password123");
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(person);
System.out.println(json);
}
}
JSON Output:
{
"name": "John"
}
- এখানে,
passwordফিল্ডটিWRITE_ONLYvisibility-এ সেট করা হয়েছে, যার ফলে serialization সময়passwordফিল্ডটি JSON-এ অন্তর্ভুক্ত হয়নি, তবে deserialization সময় তা কাজ করবে।
3. @JsonInclude Annotation
@JsonInclude অ্যানোটেশন JSON serialization-এর সময় কিছু ফিল্ড বাদ দিতে ব্যবহৃত হয়, উদাহরণস্বরূপ null বা empty values। আপনি JsonInclude.Include.NON_NULL বা JsonInclude.Include.NON_EMPTY ব্যবহার করতে পারেন।
Example:
import com.fasterxml.jackson.annotation.JsonInclude;
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Person {
private String name;
private String address;
public Person(String name, String address) {
this.name = name;
this.address = address;
}
public String getName() {
return name;
}
public String getAddress() {
return address;
}
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonIncludeExample {
public static void main(String[] args) throws Exception {
Person person = new Person("John", null);
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(person);
System.out.println(json);
}
}
JSON Output:
{
"name": "John"
}
- এখানে,
addressফিল্ডটি null হওয়ায় সেটি JSON-এ অন্তর্ভুক্ত হয়নি, কারণ@JsonInclude(JsonInclude.Include.NON_NULL)ব্যবহার করা হয়েছে।
4. @JsonIgnore Annotation
@JsonIgnore অ্যানোটেশনটি একটি ফিল্ড বা মেথডকে Serialization এবং Deserialization থেকে বাদ দেয়। এটি তখন ব্যবহৃত হয় যখন কোনো নির্দিষ্ট ফিল্ড JSON-এ শো করতে না চান।
Example:
import com.fasterxml.jackson.annotation.JsonIgnore;
public class Person {
private String name;
@JsonIgnore
private String password;
public Person(String name, String password) {
this.name = name;
this.password = password;
}
public String getName() {
return name;
}
public String getPassword() {
return password;
}
}
Serialization Example:
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonIgnoreExample {
public static void main(String[] args) throws Exception {
Person person = new Person("John", "password123");
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(person);
System.out.println(json);
}
}
JSON Output:
{
"name": "John"
}
- এখানে,
passwordফিল্ডটি@JsonIgnoreব্যবহার করার কারণে JSON-এ অন্তর্ভুক্ত হয়নি।
@JsonAutoDetectঅ্যানোটেশনটি ফিল্ড, getter, এবং setter visibility কাস্টমাইজ করতে ব্যবহৃত হয়।@JsonPropertyব্যবহার করে ফিল্ড বা মেথডের visibility নিয়ন্ত্রণ করা যায়।@JsonIncludeএবং@JsonIgnoreJSON Serialization নিয়ন্ত্রণে সহায়তা করে।- Visibility Control ব্যবহার করে আপনি JSON আউটপুট পরিষ্কার এবং কাস্টমাইজড করতে পারেন, যা API এর জন্য উপকারী।
Jackson-এর এই অ্যানোটেশনগুলো ব্যবহার করে আপনি JSON Serialization এবং Deserialization আরও ফ্লেক্সিবল এবং দক্ষভাবে কাস্টমাইজ করতে পারবেন।
Read more